﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LOLBattleQuery.Do
{
    public class SgpMatchHistoryQuery
    {

        public List<Game> games { get; set; }


        public class Game
        {
            public Metadata metadata { get; set; }
            public Json json { get; set; }
        }

        public class Metadata
        {
            public string product { get; set; }
            public string[] tags { get; set; }
            public string[] participants { get; set; }
            public string timestamp { get; set; }
            public string data_version { get; set; }
            public string info_type { get; set; }
            public string match_id { get; set; }
            public bool _private { get; set; }
        }

        public class Json
        {
            public long gameCreation { get; set; }
            public int gameDuration { get; set; }
            public long gameEndTimestamp { get; set; }
            public long gameId { get; set; }
            public string gameMode { get; set; }
            public string gameName { get; set; }
            public long gameStartTimestamp { get; set; }
            public string gameType { get; set; }
            public string gameVersion { get; set; }
            public int mapId { get; set; }
            public Participant[] participants { get; set; }
            public string platformId { get; set; }
            public int queueId { get; set; }
            public int seasonId { get; set; }
            public List<Team> teams { get; set; }
            public string tournamentCode { get; set; }
        }

        public class Participant
        {
            public int allInPings { get; set; }
            public int assistMePings { get; set; }
            public int assists { get; set; }
            public int baitPings { get; set; }
            public int baronKills { get; set; }
            public int basicPings { get; set; }
            public int bountyLevel { get; set; }
            public Challenges challenges { get; set; }
            public int champExperience { get; set; }
            public int champLevel { get; set; }
            public int championId { get; set; }
            public string championName { get; set; }
            public int championTransform { get; set; }
            public int commandPings { get; set; }
            public int consumablesPurchased { get; set; }
            public int damageDealtToBuildings { get; set; }
            public int damageDealtToObjectives { get; set; }
            public int damageDealtToTurrets { get; set; }
            public int damageSelfMitigated { get; set; }
            public int dangerPings { get; set; }
            public int deaths { get; set; }
            public int detectorWardsPlaced { get; set; }
            public int doubleKills { get; set; }
            public int dragonKills { get; set; }
            public bool eligibleForProgression { get; set; }
            public int enemyMissingPings { get; set; }
            public int enemyVisionPings { get; set; }
            public bool firstBloodAssist { get; set; }
            public bool firstBloodKill { get; set; }
            public bool firstTowerAssist { get; set; }
            public bool firstTowerKill { get; set; }
            public bool gameEndedInEarlySurrender { get; set; }
            public bool gameEndedInSurrender { get; set; }
            public int getBackPings { get; set; }
            public int goldEarned { get; set; }
            public int goldSpent { get; set; }
            public int holdPings { get; set; }
            public string individualPosition { get; set; }
            public int inhibitorKills { get; set; }
            public int inhibitorTakedowns { get; set; }
            public int inhibitorsLost { get; set; }
            public int item0 { get; set; }
            public int item1 { get; set; }
            public int item2 { get; set; }
            public int item3 { get; set; }
            public int item4 { get; set; }
            public int item5 { get; set; }
            public int item6 { get; set; }
            public int itemsPurchased { get; set; }
            public int killingSprees { get; set; }
            public int kills { get; set; }
            public string lane { get; set; }
            public int largestCriticalStrike { get; set; }
            public int largestKillingSpree { get; set; }
            public int largestMultiKill { get; set; }
            public int longestTimeSpentLiving { get; set; }
            public int magicDamageDealt { get; set; }
            public int magicDamageDealtToChampions { get; set; }
            public int magicDamageTaken { get; set; }
            public int needVisionPings { get; set; }
            public int neutralMinionsKilled { get; set; }
            public int nexusKills { get; set; }
            public int nexusLost { get; set; }
            public int nexusTakedowns { get; set; }
            public int objectivesStolen { get; set; }
            public int objectivesStolenAssists { get; set; }
            public int onMyWayPings { get; set; }
            public int participantId { get; set; }
            public int pentaKills { get; set; }
            public Perks perks { get; set; }
            public int physicalDamageDealt { get; set; }
            public int physicalDamageDealtToChampions { get; set; }
            public int physicalDamageTaken { get; set; }
            public int profileIcon { get; set; }
            public int pushPings { get; set; }
            public string puuid { get; set; }
            public int quadraKills { get; set; }
            public string riotIdName { get; set; }
            public string riotIdTagline { get; set; }
            public string role { get; set; }
            public int sightWardsBoughtInGame { get; set; }
            public int spell1Casts { get; set; }
            public int spell1Id { get; set; }
            public int spell2Casts { get; set; }
            public int spell2Id { get; set; }
            public int spell3Casts { get; set; }
            public int spell4Casts { get; set; }
            public int summoner1Casts { get; set; }
            public int summoner2Casts { get; set; }
            public long summonerId { get; set; }
            public int summonerLevel { get; set; }
            public string summonerName { get; set; }
            public bool teamEarlySurrendered { get; set; }
            public int teamId { get; set; }
            public string teamPosition { get; set; }
            public int timeCCingOthers { get; set; }
            public int timePlayed { get; set; }
            public int totalAllyJungleMinionsKilled { get; set; }
            public int totalDamageDealt { get; set; }
            public int totalDamageDealtToChampions { get; set; }
            public int totalDamageShieldedOnTeammates { get; set; }
            public int totalDamageTaken { get; set; }
            public int totalEnemyJungleMinionsKilled { get; set; }
            public int totalHeal { get; set; }
            public int totalHealsOnTeammates { get; set; }
            public int totalMinionsKilled { get; set; }
            public int totalTimeCCDealt { get; set; }
            public int totalTimeSpentDead { get; set; }
            public int totalUnitsHealed { get; set; }
            public int tripleKills { get; set; }
            public int trueDamageDealt { get; set; }
            public int trueDamageDealtToChampions { get; set; }
            public int trueDamageTaken { get; set; }
            public int turretKills { get; set; }
            public int turretTakedowns { get; set; }
            public int turretsLost { get; set; }
            public int unrealKills { get; set; }
            public int visionClearedPings { get; set; }
            public int visionScore { get; set; }
            public int visionWardsBoughtInGame { get; set; }
            public int wardsKilled { get; set; }
            public int wardsPlaced { get; set; }
            public bool win { get; set; }
        }

        public class Challenges
        {
            public float _12AssistStreakCount { get; set; }
            public float abilityUses { get; set; }
            public float acesBefore15Minutes { get; set; }
            public float alliedJungleMonsterKills { get; set; }
            public float baronTakedowns { get; set; }
            public float blastConeOppositeOpponentCount { get; set; }
            public float bountyGold { get; set; }
            public float buffsStolen { get; set; }
            public float completeSupportQuestInTime { get; set; }
            public float controlWardsPlaced { get; set; }
            public float damagePerMinute { get; set; }
            public float damageTakenOnTeamPercentage { get; set; }
            public float dancedWithRiftHerald { get; set; }
            public float deathsByEnemyChamps { get; set; }
            public float dodgeSkillShotsSmallWindow { get; set; }
            public float doubleAces { get; set; }
            public float dragonTakedowns { get; set; }
            public float earlyLaningPhaseGoldExpAdvantage { get; set; }
            public float effectiveHealAndShielding { get; set; }
            public float elderDragonKillsWithOpposingSoul { get; set; }
            public float elderDragonMultikills { get; set; }
            public float enemyChampionImmobilizations { get; set; }
            public float enemyJungleMonsterKills { get; set; }
            public float epicMonsterKillsNearEnemyJungler { get; set; }
            public float epicMonsterKillsWithin30SecondsOfSpawn { get; set; }
            public float epicMonsterSteals { get; set; }
            public float epicMonsterStolenWithoutSmite { get; set; }
            public float firstTurretKilled { get; set; }
            public float flawlessAces { get; set; }
            public float fullTeamTakedown { get; set; }
            public float gameLength { get; set; }
            public float goldPerMinute { get; set; }
            public float hadAfkTeammate { get; set; }
            public float hadOpenNexus { get; set; }
            public float highestCrowdControlScore { get; set; }
            public float immobilizeAndKillWithAlly { get; set; }
            public float initialBuffCount { get; set; }
            public float initialCrabCount { get; set; }
            public float jungleCsBefore10Minutes { get; set; }
            public float junglerKillsEarlyJungle { get; set; }
            public float junglerTakedownsNearDamagedEpicMonster { get; set; }
            public float kTurretsDestroyedBeforePlatesFall { get; set; }
            public float kda { get; set; }
            public float killAfterHiddenWithAlly { get; set; }
            public float killParticipation { get; set; }
            public float killedChampTookFullTeamDamageSurvived { get; set; }
            public float killingSprees { get; set; }
            public float killsNearEnemyTurret { get; set; }
            public float killsOnLanersEarlyJungleAsJungler { get; set; }
            public float killsOnRecentlyHealedByAramPack { get; set; }
            public float killsUnderOwnTurret { get; set; }
            public float killsWithHelpFromEpicMonster { get; set; }
            public float knockEnemyIntoTeamAndKill { get; set; }
            public float landSkillShotsEarlyGame { get; set; }
            public float laneMinionsFirst10Minutes { get; set; }
            public float laningPhaseGoldExpAdvantage { get; set; }
            public float legendaryCount { get; set; }
            public float lostAnInhibitor { get; set; }
            public float maxCsAdvantageOnLaneOpponent { get; set; }
            public float maxKillDeficit { get; set; }
            public float maxLevelLeadLaneOpponent { get; set; }
            public float mejaisFullStackInTime { get; set; }
            public float moreEnemyJungleThanOpponent { get; set; }
            public float multiKillOneSpell { get; set; }
            public float multiTurretRiftHeraldCount { get; set; }
            public float multikills { get; set; }
            public float multikillsAfterAggressiveFlash { get; set; }
            public float mythicItemUsed { get; set; }
            public float outerTurretExecutesBefore10Minutes { get; set; }
            public float outnumberedKills { get; set; }
            public float outnumberedNexusKill { get; set; }
            public float perfectDragonSoulsTaken { get; set; }
            public float perfectGame { get; set; }
            public float pickKillWithAlly { get; set; }
            public float poroExplosions { get; set; }
            public float quickCleanse { get; set; }
            public float quickFirstTurret { get; set; }
            public float quickSoloKills { get; set; }
            public float riftHeraldTakedowns { get; set; }
            public float saveAllyFromDeath { get; set; }
            public float scuttleCrabKills { get; set; }
            public float skillshotsDodged { get; set; }
            public float skillshotsHit { get; set; }
            public float snowballsHit { get; set; }
            public float soloBaronKills { get; set; }
            public float soloKills { get; set; }
            public float stealthWardsPlaced { get; set; }
            public float survivedSingleDigitHpCount { get; set; }
            public float survivedThreeImmobilizesInFight { get; set; }
            public float takedownOnFirstTurret { get; set; }
            public float takedowns { get; set; }
            public float takedownsAfterGainingLevelAdvantage { get; set; }
            public float takedownsBeforeJungleMinionSpawn { get; set; }
            public float takedownsFirstXMinutes { get; set; }
            public float takedownsInAlcove { get; set; }
            public float takedownsInEnemyFountain { get; set; }
            public float teamBaronKills { get; set; }
            public float teamDamagePercentage { get; set; }
            public float teamElderDragonKills { get; set; }
            public float teamRiftHeraldKills { get; set; }
            public float threeWardsOneSweeperCount { get; set; }
            public float tookLargeDamageSurvived { get; set; }
            public float turretPlatesTaken { get; set; }
            public float turretTakedowns { get; set; }
            public float turretsTakenWithRiftHerald { get; set; }
            public float twentyMinionsIn3SecondsCount { get; set; }
            public float unseenRecalls { get; set; }
            public float visionScoreAdvantageLaneOpponent { get; set; }
            public float visionScorePerMinute { get; set; }
            public float wardTakedowns { get; set; }
            public float wardTakedownsBefore20M { get; set; }
            public float wardsGuarded { get; set; }
            public float getTakedownsInAllLanesEarlyJungleAsLaner { get; set; }
            public float killsOnOtherLanesEarlyJungleAsLaner { get; set; }
            public float highestWardKills { get; set; }
            public float controlWardTimeCoverageInRiverOrEnemyHalf { get; set; }
            public float earliestDragonTakedown { get; set; }
            public float firstTurretKilledTime { get; set; }
            public float thirdInhibitorDestroyedTime { get; set; }
            public float fastestLegendary { get; set; }
            public float highestChampionDamage { get; set; }
            public float soloTurretsLategame { get; set; }
            public float fasterSupportQuestCompletion { get; set; }
            public float baronBuffGoldAdvantageOverThreshold { get; set; }
            public float earliestBaron { get; set; }
        }

        public class Perks
        {
            public Statperks statPerks { get; set; }
            public Style[] styles { get; set; }
        }

        public class Statperks
        {
            public int defense { get; set; }
            public int flex { get; set; }
            public int offense { get; set; }
        }

        public class Style
        {
            public string description { get; set; }
            public Selection[] selections { get; set; }
            public int style { get; set; }
        }

        public class Selection
        {
            public int perk { get; set; }
            public int var1 { get; set; }
            public int var2 { get; set; }
            public int var3 { get; set; }
        }

        public class Team
        {
            public object[] bans { get; set; }
            public Objectives objectives { get; set; }
            public int teamId { get; set; }
            public bool win { get; set; }
        }

        public class Objectives
        {
            public Objective baron { get; set; }
            public Objective champion { get; set; }
            public Objective dragon { get; set; }
            public Objective inhibitor { get; set; }
            public Objective riftHerald { get; set; }
            public Objective tower { get; set; }
        }

        public class Objective
        {
            public bool first { get; set; }
            public int kills { get; set; }
        }

    }
}
